806.TXT ===================================================================== Protecting Your Data ===================================================================== PRODUCT: R:BASE VERSION: 5.0 or Higher ===================================================================== CATALOG: General Informaton AREA : General Information ===================================================================== Security is vital to a database. You need to protect your confidential and sensitive data and guard against accidental and inadvertent edits of data. R:BASE's optimistic concurrency control, table and row locking, constraints (primary and foreign keys), and data entry and delete rules provide a wide variety of data integrity controls. In addition, R:BASE has the following two options for controlling access to your data. The two options are: SQL Grant/Revoke system of access rights Form read and modify passwords Each option provides a different type and level of security. Understanding and using these options enables application developers to provide appropriate security for any type of database and application. Owner Identifier The first level of security is the owner identifier. To use either of the R:BASE data access control systems, you must first assign an owner identifier to the database. Assign the owner identifier by selecting Access rights from the Utilities menu. Click on the Change Owner button. You are prompted to enter a new owner identifier. After assigning the owner identifier, R:BASE prompts you for the owner identifier the next time you start R:BASE and connect to the database. You can also change the owner identifier using the RENAME command in the R> prompt window. Only the owner of the database can use commands or menu options that modify database structure. The owner of a database has all rights to all tables. As the owner of the database, you decide the access rights you want to give to other users of the database. The SQL Grant/Revoke access rights are assigned by selecting Access Rights from the Utilities menu or by using the GRANT and REVOKE commands at the R> prompt. Form read and modify passwords are assigned when creating a form in the Form Designer. Using GRANT/REVOKE Access Rights The SQL Grant/Revoke access rights system gives you flexibility to provide different levels of access to a single table to many different users. The database owner can grant the following levels of permissions: SELECT Permission to read data from the specified table. Generally, if you assign INSERT, DELETE, or UPDATE rights to a user, you also need to assign them SELECT rights. If SELECT permission is not assigned, the user cannot view data from the table. INSERT Permission to add new rows to the specified table. To add data with a form or the Data Browser, the user must be assigned INSERT permission. In addition, importing data or using the LOAD or INSERT commands from the R> prompt requires INSERT permission. DELETE Permission to delete rows from the specified table. For users to delete a row of data or all rows from a table, they must be granted DELETE permission. UPDATE Permission to modify data in the specified table on a column by column basis. UPDATE permission can be granted without a column list specified, giving the user permission to change the data in any column in the table. When granted with a column list, UPDATE permission lets the user change data in the specified columns only. ALTER Permission to modify the structure of the specified table. Normally, only the owner of a database can change the structure of a database, such as adding new columns to a table, changing the definition of existing columns, or dropping tables and views. The owner can grant permission to a user to change the column definitions in a table by assigning the user ALTER permission. In addition to changing the structure of a database by modifying table definitions, the ALTER permission gives the user permission to DROP the specified table or view. This permission is only available in R:BASE 4.5++ and higher. CREATE Permission to create new, permanent tables in the database (STATICDB OFF only). When STATICDB is set to on, any user can create a new table or view, that table or view is temporary, however, and automatically removed when the database is disconnected. Additionally, any user can create a permanent view or a table using one of the relational commands_PROJECT, INTERSECT, UNION, JOIN_without having CREATE permission assigned. The CREATE permission lets the owner give another user the right to add tables to the database using the CREATE TABLE command. This permission is only available in R:BASE 4.5++ and higher. WITH GRANT Permission to grant the specified permission to OPTION other users. This permission is used to allow other users to grant access rights. You might want to assign a department supervisor, for example, the WITH GRANT OPTION so that they can assign access rights to users in their department. A user identifier can be granted one or more of these permissions for any table. The owner can grant the same permission to many different users. Permissions are granted on a table by table basis. The same permission on a table can be granted to many users in one command, but permissions on each table must be granted separately. You cannot grant permissions to many tables in one command. Using the ALL PRIVILEGES option, the owner can grant SELECT, UPDATE, INSERT, and DELETE permissions at one time. The ALTER and CREATE permissions must be granted individually. The SQL Grant/Revoke system is in effect as soon as you assign an owner identifier to the database. Once an owner identifier is assigned, only the owner can access data until the owner grants permissions to other users. Once you assign an owner identifier, you must assign permissions to users on specific tables for those users to access data in the database. If permissions are not explicitly granted to users, they cannot access any data in any table. Permissions can be granted to any user by specifying PUBLIC as the user identifier. The current user identifier is stored in the keyword USER. When the current user identifier is not the owner identifier, the only tables displayed for use are those tables for which the current user identifier has permission. All forms, reports, and labels are listed, however, regardless of permissions on the underlying tables. When using forms, R:BASE looks for Grant/Revoke permissions on the form tables if no form passwords have been defined. In general, to add data using a form, INSERT permission is required. To edit data, UPDATE permission is required. To delete rows, DELETE permission is needed. Form lookup expressions require SELECT permission on the lookup table. Reports and labels require SELECT permission on the driving table or view, as well as SELECT permission on the lookup table(s) used in any expressions. When a user creates a new table with one of the relational commands or by choosing Save Answer in the Data Browser, the user is automatically assigned all access rights except for the WITH GRANT OPTION to the new table. When a user with CREATE permission makes a new table, that user is automatically assigned all rights to the table, including the WITH GRANT OPTION. The LIST ACCESS command shows the permission as ALTER when access rights are automatically assigned to new tables. The ALTER permission automatically implies all other privileges. Displaying Permissions The owner of the database can list all user identifiers and assigned permissions by using the LIST ACCESS command or choosing Access Rights from the Utilities menu. The owner can list access rights for a particular user, for a permission type, for a table, or for all permissions. A user can list their permissions only. Some of the LIST ACCESS options an owner can use are: LIST ACCESS_displays all access rights granted for the entire database LIST ACCESS FOR username_displays all access rights granted to all tables for the specified user LIST ACCESS ON tablename_displays all access rights granted to all users for the specified table LIST ACCESS permission_displays all access rights granted for all users and all tables with the specified permission Backing Up a Database Any user can use the menu option in R:BASE 5.0 to back up the entire database. The menu option makes a compressed backup of the disk files. When the files are restored, the user has the same access rights as in the original database. The menu option for backing up a database in R:BASE 4.5++ and earlier operates the same as the R:BASE BACKUP command. The BACKUP command from the R> prompt makes an ASCII file of R:BASE commands. A user can back up data for tables or views for which they have been granted SELECT permission. Only the owner can back up the structure of a table, or back up the entire database. When the structure is backed up, the owner identifier and user identifiers are written in ASCII format to the backup file and are readable by anyone who looks at the file. Granting Access to System Tables The owner of a database does not need to explicitly grant access to the system tables. R:BASE automatically retrieves data from the system table if the user has permission to use the command that needs the system table information. For example, to enter data with a form, R:BASE needs to read the form definition from the SYS_FORMS or SYS_FORMS2 system table. If the user has permission to access the tables on which the form is based, R:BASE automatically retrieves the form definition; the owner does not need to grant the user access to the SYS_FORMS and SYS_FORMS2 tables. The only time the owner needs to grant a user access to a system table is when the owner wants the user to be able to create forms, reports, or labels. In this situation, the owner grants the user INSERT, SELECT, UPDATE, and DELETE permissions on the appropriate system tables. When using Crystal Reports or the SQL Engine, the owner must grant users SELECT permission on the system tables SYS_TABLES, SYS_COLUMNS, and SYS_TYPES. Crystal Reports and the SQL Engine send SQL commands to R:BASE that require permission to read these three system tables. Form Passwords Because forms can access multiple tables, the Grant/Revoke access rights system might not apply. You can have one form that accesses tables with different Grant/Revoke permission levels assigned. To resolve this dilemma, forms have their own password system. The database owner specifies a read password or a modify password for a form. The password applies to all tables associated with the form. Form passwords override the Grant/Revoke access rights system; if you assign a password to a form, a user must enter that password as the current user identifier to use the form. Only the owner of a database can assign form passwords. The passwords are assigned by choosing Form Settings from the Layout menu. Form passwords assign permission to read or edit data with the form; they are not related to permission to create or modify the form. The LIST FORMS command lists all forms in the database, even those with passwords assigned. Setting User Identifiers R:BASE might prompt for a user identifier when a database is connected. This happens when all the tables are protected and no access rights have been granted to PUBLIC. After you have assigned an owner identifier to the database, but before any access rights are granted to users, R:BASE prompts for a user identifier when the database is connected. If rights are granted to PUBLIC, no user identifier is needed to connect to the database and R:BASE does not prompt for one. If an access right has been granted to PUBLIC, you must specifically set the user identifier; R:BASE does not prompt you for one. To enter or change the user identifier, choose Set User ID and Password from the Utilities menu or use the SET USER command at the R> prompt. When you enter your user identifier and optional password, R:BASE puts the value you enter into the keyword USER. The user identifier can be the owner identifier, the name of a user who has been granted access rights to some of the tables in the database, a form password, or PUBLIC. Only one user identifier is currently active. The SHOW USER command displays the current user identifier. To capture the current user identifier in a variable, use the command SET VAR vpass = (CVAL('user')). The keyword USER is not the same as the network ID or NAME. R:BASE does not check to see that a valid user identifier was entered in response to the SET USER command or other prompt. The user identifier is checked at the time a command is executed. R:BASE checks the current value of the keyword USER to see if that user identifier has the appropriate permission to execute the requested action. For example, the SELECT command requires SELECT permission on the table(s) referenced in the SELECT command. When the command is executed, R:BASE checks to see if the current user identifier has SELECT privileges on those tables. User Passwords Each user can assign a password to their own user identifier. Once a password has been assigned to a user identifier, R:BASE automatically prompts for the password after the user identifier is entered. To gain access to the database, the correct user identifier and corresponding password must be entered. The database owner cannot look at users' passwords, but the owner can reset the password for a user identifier. When the current user identifier is the database owner, setting a password assigns the password to the owner identifier. Neither the owner nor any user can look at or reset the password for the owner identifier. If a user forgets their user identifier, the database owner can tell that user what the user identifier is, or reassign it. The owner can also reset the password for a user identifier. If the owner identifier or password is forgotten, there is no way within R:BASE to retrieve it or change it. For additional information, refer to the GRANT entry in the Reference Manual or in online Help.