The Encryption
Wizard for Oracle
Version 5.0
Copyright 2003 Relational Database Consultants, Inc.
All Rights Reserved.
The
Encryption Wizard for Oracle
API
Library Reference
Relational
Database Consultants, Inc. (RDC)
12021
Wilshire Blvd
Suite 108
Los
Angeles, CA. 90025
310-281-1915
Copyright 2003. All Rights
Reserved. No portion of this document
may be reproduced, recorded, transmitted, or copied without permission from the
copyright holders. Information in this
document is subject to change without notice.
Trademark Notice
All trademarks in this document belong to their respective holders.
The Encryption Wizard for Oracle
API Library
Reference
Section One - Object Management
Section One
Object Management
The Encryption Wizard for Oracle provides a rich library of Object Mangement methods that can be invoked from SQL*Plus or direclty through any interface such as JDBC that connects to Oracle and can call Oracle stored procedures and packages.
The Object Management API is only to be used for Encrpytion Wizard Administrators. End-user applications that need to access encrypted data should interface through the Runtime Methods as discussed in the next section. You must be connected to the Oracle RDBMS as rdc_encrypt_user to use the object management methods in this section.
The Object Management API allows you to Encrypt and Decrypt data within your Oracle RDBMS. Along with basic encryption functions, the Object Management API provides easy methods to create Runtime Passwords, Decrypted Views, Restricted User Lists, and define audit trails against given sets or subsets or your encrypted data.
It is important to read the Encryption Wizard User Manual before attempting to use any of these API calls. In the User Manual, the concepts of the Encryption Wizard and its underlying API are discussed in more general terms.
If you plan to invoke the Encryption Wizard API from SQL*Plus, it is recommended that you issue this command to start each session:
SQL>Set ServerOutput On
In this way you can view the informational messages of the Encryption Wizard packages if there is an error or warning. All Encryption Wizard errors and warnings are populated in the table Internal_Aduit and can be queried using SQL. If you plan on using the Encryption Wizard from SQL*Plus it would be helpful to create a series of .sql scripts to run the library commands you plan to use.
1. EncryptData
EncryptData is the core method that is used to encrypt your database data. EncryptData will encrypt a given schema, table or column based on the key value (password) that you pass into the method. If you do not provide a key-value, one will be generated for you. If you are using an administrative password, all Encryption Wizard users will need to call the runtime method login before encrypting table data.
Along with scope of encryption, defined at the schema, table or column level, the method EncrpytData will encrypt table data is based on an encryption type. Valid encryption types can be found querying the table valid_encryption_types. EncryptData also allows you to specify a Commit Point. The Commit Point value specifies the number of rows to be encrypted before each commit is issued to the database.
The method CountEncryptedColumns should be called before and after a call to this method to monitor the current state of encryption. EncryptData only returns a message if there is a fatal error.
Specification:
Procedure EncryptData
(
KeyValue In
Varchar2,
TableOwner In
Varchar2,
TableName In
Varchar2 Default
Null,
ColumnName In
Varchar2 Default
Null,
EncryptionType In
Varchar2 Default
DefaultEncryptionType,
CommitPoint In
Number Default
DefaultCommitPoint
);
Examples:
/*Encrypt complete schema
SCOTT using DES (default) with a generated key*/
SQL>exec
RDC_Encrypt_Object.EncryptData(Null,‘SCOTT’);
/*Encrypt complete table
SCOTT.EMP using DES (default) with the key “Hello World”*/
SQL>exec
RDC_Encrypt_Object.EncryptData(‘Hello World’, ‘SCOTT’, ‘EMP’);
/*Encrypt complete table
SCOTT.EMP with Triple DES while issuing commit every 2048 records*/
SQL>exec
RDC_Encrypt_Object.EncryptData(Null, ‘SCOTT’,’EMP’,NULL,’Triple DES3’, 2048);
/*Encrypt
complete table SCOTT.EMP and print encrypted columns before and after
encryption call*/
SQL>Begin
dbms_output.put_line(‘Before:
‘||RDC_Encrypt_Util.CountEncryptedColumns);
RDC_Encrypt_Object.EncryptData(Null,‘SCOTT’,’EMP’);
dbms_output.put_line(‘After:
‘||RDC_Encrypt_Util.CountEncryptedColumns);
End;
2. DecryptData
DecryptData is the core method utilized to decrypt your encrypted data and return it to its original state. As with encryption, DecryptData can operate on a schema, table, or a given column. You can also specify a commit-point as with the EncryptData method. If you are using an administrative password you will need to call the method login before calling DecryptData.
The method CountEncryptedColumns should be called before and after a call to this method to monitor the current state of encryption. DecryptData only returns a message if there is a fatal error.
Specification:
Procedure DecryptData
(
TableOwner In
Varchar2 Default
Null,
TableName In
Varchar2 Default
Null,
ColumnName In
Varchar2 Default
Null,
CommitPoint In
Number Default
Null
);
Examples:
/*Decrypt complete schema
SCOTT*/
SQL>exec
RDC_Encrypt_Object.DecryptData(‘SCOTT’);
/*Decrypt complete table
SCOTT.EMP*/
SQL>exec
RDC_Encrypt_Object.DecryptData(‘SCOTT’, ‘EMP’);
/*Decrypt complete table
SCOTT.EMP while issuing commit every 2048 records*/
SQL>exec
RDC_Encrypt_Object.DecryptData(‘SCOTT’,’EMP’,NULL, 2048);
/*Decrypt
complete table SCOTT.EMP and print encrypted column count before and after
decryption call*/
SQL>Begin
dbms_output.put_line(‘Before:
‘||RDC_Encrypt_Util.CountEncryptedColumns);
RDC_Encrypt_Object.DecryptData(‘SCOTT’,’EMP’);
dbms_output.put_line(‘After:
‘||RDC_Encrypt_Util.CountEncryptedColumns);
End;
3. CreateDecryptedView
This method is used to create or recreate a decrypted view against a single base table. CreateDecryptedView can be used either to create a new view against an encrypted base table or to modify an existing view name and/or owner. An encrypted base table can have only one decrypted view at a given point in time.
If the UpdateFlag is set to FALSE, your decrypted view will be a read-only view. The default value for this variable is TRUE.
Specification:
Procedure CreateDecryptedView
(
TableOwner In
Varchar2,
TableName In
Varchar2,
ViewOwner In
Varchar2 Default
Null,
ViewName In
Varchar2 Default
Null,
UpdateFlag In
Boolean Default
True,
OverWrite In
Boolean Default
True
);
Examples
/*Creates an updateable
decrypted view named V_EMP in the schema SCOTT*/
SQL>exec
RDC_Encrypt_Object.CreateDecryptedView(‘SCOTT’, ‘EMP’,’SCOTT’,’V_EMP’);
/*Creates a read-only
decrypted view named V_EMP in the schema SCOTT*/
SQL>exec
RDC_Encrypt_Object.CreateDecryptedView(‘SCOTT’, ‘EMP’,’SCOTT’,’V_EMP’, False);
4. DropDecryptedView
DropDecryptedView is used to drop an existing updateable or read-only decrypted view created by the Encryption Wizard. This method should always be called after you decrypt a table, since the remaining decrypted view will be invalid after your table data is returned to its original state.
To drop a decrypted view, you do not need to remember the view name, simply the base table that it was built against. To find a View Name for a given encrypted base table, query the table encrypted_table.
Specification
Procedure DropDecryptedView
(
TableOwner In
Varchar2,
TableName In
Varchar2,
OverWriteFlag In
Boolean Default True
);
Examples
/* drops any decrypted view
associated with the base table SCOTT.EMP */
SQL>exec
RDC_Encrypt_Object.DropDecryptedView(‘SCOTT’, ‘EMP’);
5. SetDefaultPassword
This method is used to assign a Default Runtime Password for a database object as described in the Encryption Wizard User Manual. By default a user has access to decryption and encryption operations based on their Oracle database grants and roles. If a Default Runtime Password is assigned, then an end-user must authenticate this password at runtime through a package call to rdc_encrypt_runtime.login as discussed in the next chapter.
A Default Runtime Password can be assigned for a complete schema, table, or column.
To remove a runtime password, SetDefaultPassword must be called with a null password. RDC_Encrypt_User authenticates through the
administration password and not this method.
The Default Runtime Password can be over-ridden by a User-Specific Runtime Password assigned
to a given user through a method call to SetRestrictedPassword.
Specification
Procedure SetDefaultPassword
(
Password In
Varchar2,
TableOwner In
Varchar2,
TableName In
Varchar2 Default
Null,
ColumnName In
Varchar2 Default
Null,
NoCommit In
Boolean Default
False
);
Examples
/*Requires login to
decrypt/encrypt objects in the schema SCOTT. The password is TIGER*/
SQL>exec
RDC_Encrypt_Object.SetDefaultPassword(’TIGER’, ‘SCOTT’);
/*Removes the above Runtime
Password*/
SQL>exec
RDC_Encrypt_Object.SetDefaultPassword(NULL,’SCOTT’);
/*Resets the above Runtime
Password, but only requires it for a single column*/
SQL>exec
RDC_Encrypt_Object.SetDefaultPassword(‘TIGER’,’SCOTT’,’EMP’,’SAL’);
6. InsertRestrictedUser
This method is used to create or modify a Restricted User List as described in the Encryption Wizard User Manual. By default a user has access to decryption and encryption operations based on their Oracle database grants and roles. Restricted User Lists grant users access to a given encrypted schema, table, or column and blocks all other users not listed. Once all users are deleted from a Restricted User List, the objects of that list are not restricted and again can be decrypted or encrypted by any Oracle user with access to the underyling database object.
The two valid authorization types that can be granted to a user for a given database object are either encryption privileges (read/write) ‘E’ or decryption privileges (read-only) ‘D’. The current set of restricted users and their authorizations can be queried from the table encrypted_column_user.
Specification
Procedure
InsertRestrictedUser
(
TableOwner In
Varchar2,
TableName In
Varchar2,
ColumnName In
Varchar2,
UserName In
Varchar2,
AuthorizationType In
Char,
NoCommit In
Boolean Default False
);
Examples
/*Restricts access of
SCOTT.EMP to the user SYSTEM*/
SQL>exec
RDC_Encrypt_Object.InsertRestrictedUser(‘SCOTT’,’EMP’,NULL,’SYSTEM’,’E);
/*Restricts access of SCOTT.EMP.SAL to SYSTEM who is only granted
decryption (Read) privileges*/
SQL>exec
RDC_Encrypt_Object.InsertRestrictedUser(‘SCOTT’,’EMP’,SAL,’SYSTEM’,’D’);
/*Restricts access of the
complete schema SCOTT to SCOTT, thus blocking all users not listed*/
SQL>exec
RDC_Encrypt_Object.InsertRestrictedUser(‘SCOTT’,NULL,NULL,’SCOTT’,’E’);
7. SetRestrictedPassword
This method is used to assign a User-Specific Runtime Password to a user defined in a Restricted User List as described in the Encryption Wizard User Manual. By default a user has access to decryption and encryption operations based on their Oracle database grants and roles if they appear on a restricted user list. If a Runtime Password is assigned, then an end-user must authenticate this password at runtime through the package call rdc_encrypt_runtime.login as discussed in the next chapter.
To remove a runtime password, SetRestrictedPassword must be called with a null password. Of course, once a User or Restricted User List is removed, the runtime password is also deleted. Only users on Restricted User Lists may be assigned runtime passwords.
A User-Specific Runtime Password may be assigned to a given user for a complete schema, a table, or a single column depending on the scope defined in this method call. SetRestrictedPassword will override any Default Runtime Password assigned to a given schema, table, or column – for the user specified in the method call. RDC_Encrypt_User authenticates through the administration password and not this method.
Specification
Procedure
SetRestrictedPassword
(
UserName In
Varchar2,
Password In
Varchar2,
TableOwner In
Varchar2,
TableName In
Varchar2 Default
Null,
ColumnName In
Varchar2 Default
Null,
NoCommit In
Boolean Default
False
)
Examples
/*Requires SYSTEM to login to
decrypt/encrypt the schema scott, with the password TIGER*/
SQL>exec
RDC_Encrypt_Object.SetRestrictedPassword(‘SYSTEM’,’TIGER’,’SCOTT’);
/*Removes the above Runtime
Password*/
SQL>exec RDC_Encrypt_Object.SetRestrictedPassword(‘SYSTEM’,NULL,’SCOTT’);
/*Resets the above Runtime
Password, but only requires it for a single column*/
SQL>exec
RDC_Encrypt_Object.SetRestrictedPassword(‘SYSTEM’,’TIGER’,’SCOTT’,’EMP’,’SAL’);
DeleteRestrictedUser is used to remove either one or all users from a Restricted User List. This operation can be performed at the Schema, Table, or Column level. If a Restricted User List is removed completely by specifying a NULL Username or if the last user is removed from a Restricted User List, access to the given object will be granted based only on database privileges.
Specification
Procedure
DeleteRestrictedUser
(
TableOwner In
Varchar2,
TableName In
Varchar2 Default Null,
ColumnName In
Varchar2 Default Null,
UserName In
Varchar2 Default Null,
NoCommit In
Boolean Default False
);
Examples
/*removes SYSTEM from the
restricted user list for table SCOTT.EMP*/
SQL>exec
RDC_Encrypt_Object.DeleteRestrictedUser(‘SCOTT’,’EMP’,NULL,’SYSTEM’);
/*removes restriction of
SCOTT.EMP.SAL from SYSTEM */
SQL>exec
RDC_Encrypt_Object.DeleteRestrictedUser(‘SCOTT’,’EMP’,’SAL’,’SYSTEM’);
/*removes all restricted
lists from the schema SCOTT, thus allowing users to access encrypted data*/
SQL>exec
RDC_Encrypt_Object.DeleteRestrictedUser(‘SCOTT’);
9. SetAudting
This method allows for session auditing to be specified for
any encrypted schema, table, or column.
Auditing can be specified for actions of Encryption (E), Decryption (D),
or both (B). All session auditing
records are inserted into the table encrypt_audit.
Specification
Procedure SetAuditing
(
TableOwner In
Varchar2,
TableName In
Varchar2,
ColumnName In
Varchar2,
AuditType In
Varchar2
);
/*Set session auditing to encryption
(write) for all encrypted tables within the schema scott */
SQL>RDC_Encrypt_Util.SetAuditing(‘SCOTT’,
NULL, NULL, ‘E’);
/*Set session auditing for
all operations against the table SCOTT.EMP*/
SQL>RDC_Encrypt_Util.SetAuditing(‘SCOTT’,’EMP’,NULL,’B’);
/*Set session auditing for
Decryption (read) for column EMP.SAL*/
SQL>RDC_Encrypt_Util.SetAuditing(‘SCOTT’,’EMP’,SAL,’D’);
10.
DeleteAuditing
To turn-off auditing for a given schema, table, or column we call the method DeleteAuditing. This method returns an integer representing the number of columns successfully removed from auditing as a result of the function call.
Specification
Function DeleteAuditing
(
TableOwner In
Varchar2,
TableName In
Varchar2,
ColumnName In
Varchar2
)
Return Number;
Examples
/*turns off auditing for all
objects in the schema scott*/
SQL>exec
dbms_output.put_line(RDC_Encrypt_Util.deleteauditing(‘SCOTT’));
/*turns off auditing for the
table SCOTT.EMP*/
SQL>exec
dbms_output.put_line(RDC_Encrypt_Util.deleteauditing(‘SCOTT’, ‘EMP’));
11.
SetAdminPassword
The Administrative Password is used to prevent any Oracle user, even a DBA, from unauthorized use of the Encryption Wizard. Once this password is set, users will need to use the .login method before using any of the administrative methods. Runtime decryption and encryption does not require this password, only administrative functions.
To set the administrative password, simply pass in a string to SetAdminPassword. If you are already using an administrative password you will need to call the method login before calling SetAdminPassword.
Specification
Procedure SetAdminPassword
(
Password In
Varchar2
);
Example
/* sets the Administrative
Password to ‘My Password */
SQL>exec
RDC_Encrypt_Object.SetAdminPassword(‘My Password’);
/* Logs on with the with the
new password and changes the Administrative Password to ‘My Password */
SQL>exec
RDC_Encrypt_Object.Login(‘My Password’);
SQL>exec
RDC_Encrypt_Object.SetAdminPassword(‘New Password’);
12.
Login
Login is used to identify Encryption Wizard Administrators if there is an Administrative Password set. The Login method must be used to authenticate an Encryption Wizard Administrator before any operations on existing encrypted data, decrypted views, audit logs, runtime passwords, or restricted user lists can occur. After three attempts to Login, this method requires you to reconnect to Oracle.
The Login method can only be called by connecting to the Oracle account rdc_encrypt_user. All other users authenticate using Runtime Passwords and by evoking the rdc_encrypt_runtime.login method as discussed in the next chapter.
Specification
Procedure Login
(
Password In
Varchar2
);
Example
/*logs in as administrator
with the password “Hello World”*/
SQL>exec
RDC_Encrypt_Object.login(‘Hello World’);
13.
ChangeRollbackSegment
This method allows you to specify a rollback segment for your session. Simply call this method with a valid online rollback segment name and the new rollback segment will be set as the default for the remainder of the session.
Specification
Procedure
ChangeRollbackSegment
(
SegmentName In
Varchar2
);
Example
SQL>exec
RDC_Encrypt_Util.ChangeRollbackSegment(‘Roll_Large’);
14.
BackupKeys
This method is used to backup the encryption keys of the Encryption Wizard to a flat-file. Backupkeys can backup the keys for a database, schema, table, or single column. You may also supply an optional password to insure against unauthorized restoration of encryption keys.
Key backups are only valid for the database that they are backed-up from. This insures that a hacker cannot restore these keys using the Encryption Wizard if they are ever stolen. Key backups may also not span different releases of Oracle.
Specification
Procedure BackupKeys
(
FileName In
Varchar2,
TableOwner In
Varchar2 Default Null,
TableName In
Varchar2 Default Null,
ColumnName In
Varchar2 Default Null,
Password In
Varchar2 Default Null
);
Examples
/* backs up
all encryption keys in the database to a flat file */
SQL>exec
rdc_encrypt_backup.BackupKeys(‘/u01/encrypt/bak/myfile.txt’);
/* backups up the encryption
keys for the schema SCOTT using the password “TIGER” */
SQL>exec
rdc_encrypt_backup.BackupKeys(‘/01/temp.txt, ‘SCOTT’, Null, Null, ‘TIGER’);
15.
RestoreKeys
This method is used to restore the encryption keys of a flat-file to the Encryption Wizard schema. RestoreKeys can restore the keys for a database, schema, table, or single column. You may also supply an optional password to insure against unauthorized restoration of encryption keys.
If you provide the Boolean TRUE for the OverWriteFlag, the Encryption Wizard will overwrite any existing keys in the database that are restored from the flat-file.
Specification
Procedure RestoreKeys
(
FileName In
Varchar2,
TableOwner In
Varchar2 Default Null,
TableName In
Varchar2 Default Null,
ColumnName In
Varchar2 Default Null,
Password In
Varchar2 Default Null,
OverWriteFlag In
Boolean Default False
);
Examples
/*Restores the encryption
keys for an entire database*/
SQL>exec
rdc_encrypt_backup.RestoreKeys(‘/u01/encrypt/bak/myfile.txt’);
/*Restores the Encryption
Keys for the table EMP, overwriting any existing keys*/
SQL>exec
rdc_encrypt_backup.RestoreKeys(‘/u01/tmp.txt, ‘SCOTT’, ‘EMP’, Null, Null,
True);
16.
CountEncryptedColumns
This Method is used in determining if a given column is encrypted. It can also be used to check to see if a given table or schema has encrypted columns within it. The method CountEncryptedColumns will either return a positive integer specifying the number of encrypted columns for the object scope, or the function will return 0 if there are no currently encrypted columns.
Specification
Function
CountEncryptedColumns
(
TableOwner In
Varchar2 Default Null,
TableName In
Varchar2 Default Null,
ColumnName In
Varchar2 Default Null
)
Return Number;
Example
/*return the number of
columns encrypted in the SCOTT schema*/
SQL>exec
dbms_output.put_line(RDC_Encrypt_Util.CountEncryptedColumns(‘SCOTT’));
/*return 1 if EMP.SAL is
encrypted, 0 if it is not */
SQL>exec
dbms_output.put_line(RDC_Encrypt_Util.CountEncryptedColumns(‘SCOTT’,’EMP’,’SAL’));
/*Pseudo-Code for EMP.SAL
check within 3 GL Language via generic CALL method*/
If ( call((RDC_Encrypt_Util.CountEncryptedColumns(‘SCOTT’,’EMP’,’SAL’))
> 0)
17.
CountAuditLog
This method counts the number of audit records in the table encrypt_audit for a given schema, table, or column. Records no longer needed from this table can be deleted at any time manually.
Function CountAuditLog
(
TableOwner In
Varchar2 Default Null,
TableName In
Varchar2 Default Null,
ColumnName In
Varchar2 Default Null
)
Return Number;
/* Counts all audit records
for the schema SCOTT */
SQL>exec
dbms_output.put_line(RDC_Encrypt_Util.CountAuditLog(‘SCOTT’));
/* Counts all audit records
for the column EMP.SAL */
SQL> exec
dbms_output.put_line(RDC_Encrypt_Util.CountAuditLog (‘SCOTT’,’EMP’,’SAL’));
/*Counts all Encryption
Wizard audit records in your RDBMS*/
SQL> exec
dbms_output.put_line(RDC_Encrypt_Util.CountAuditLog;
18.
IsObjectAudited
This method returns TRUE if a given schema, table, or column contains columns being audited, and FALSE otherwise.
Specification
Function IsObjectAudited
(
TableOwner In
Varchar2,
TableName In
Varchar2 Default Null,
ColumnName In
Varchar2 Default Null
)
Return Boolean;
Examples
/*PL/SQL Example – Print
Notification if SCOTT.EMP contains no audited columns*/
Begin
If
RDC_Encrypt_Util.IsObjectAudited(‘SCOTT’,’EMP’) = False Then
DBMS_Output.Put_Line(‘Encrypted Table
Scott is not being audited’);
End
If;
End;
19.
IsDecryptedView
IsDecryptedView is a function that returns TRUE if a decrypted view has been created against a given base table and returns FALSE if there is no such decrypted view created for the encrypted base table.
Specification
Function IsDecryptedView
(
TableOwner In
Varchar2,
TableName In
Varchar2
)
Return Boolean;
Examples
/*PL/SQL Example - creates a
decrypted view V_EMP for table SCOTT.EMP if there is no such view*/
Begin
If
RDC_Encrypt_Util.IsDecryptedView(‘SCOTT’,’EMP’) = False Then RDC_Encrypt_Util.CreateDecryptedView(‘SCOTT’,’EMP’,’SCOTT’,’V_EMP’);
End
If;
End;
20.
IsRecovery
The IsRecovery method method returns a Boolean if recovery is needed on an encrypted base table. Recovery implies that an attempt to decrypt or encrypt an entire base table was only partially successful.
Specification
Function IsRecovery
(
TableOwner In
Varchar2,
TableName In
Varchar2
)
Return Boolean;
Examples
/*PL/SQL example – If
SCOTT.EMP needs recover, then decrypt the table*/
Begin
If
RDC_Encrypt_Util.IsRecovery(‘SCOTT’,’EMP’) = True Then RDC_Encrypt_Object.DecryptData(‘SCOTT’,’EMP’);
End
If;
End;
/
21.
GetVersionNo
GetVersionNo returns the current string of the Encryption Wizard version source code that you are running. This may be helpful in troubleshooting.
Specification
Function GetVersionNo
Return Varchar2
Examples
SQL>exec
dbms_output.put_line(RDC_Encrypt_Object.getversionno);
22.
GetLastErrorMsg
GetLastErrorMsg Method is used to retrieve the last
Encryption Wizard error received for a given session. After a call to this method, this last error
message is again initialized to NULL.
All Encryption Wizard errors are recorded in the table Internal_Error.
Specification
Function GetLastErrorMsg
Return Varchar2;
Examples
/*Prints the last error for
your session*/
SQL>exec
dbms_output.put_line(‘Encryption Wizard Message: ‘||RDC_Core.GetLastErrorMsg);
/* Performs error checking
after an attempt to encrypt the table SCOTT.EMP*/
SQL>
Begin
RDC_Encrypt_Object.EncryptData(Null,
‘SCOTT’, ‘EMP’);
Exception When Others Then
DBMS_Output.Put_Line(‘Err:
‘||Nvl(RDC_Core.GetLastErrorMsg, SQLERRM) );
End;
/
Section Two
Runtime Methods
The Encryption Wizard Runtime Methods are designed for use
by any end-user who is required to read and/or write encrypted data. The Runtime Library consists of two core
functions, EncryptData and DecryptData.
These functions are overloaded to return Varchar2, Blob, Clob, Date, and
Number values depending on the type of parameter passed into the method. Usually these functions are hidden from the
user through the implementation of Decrypted
Views.
To use both EncryptData and the DecryptData function a user needs to pass in the integer value of the column_seq for that column. This value can be queried from the view encrypted_tab_columns or this value can be returned from the function GetColumnSeq as discussed in the previous section. The method GetColumnSeq is called from RDC_Encrypt_Runtime and can be accessed by the general Oracle user.
Along with the core encryption/decryption methods of the Runtime Library, a login method is also provided for end-users to optionally authenticate Runtime Passwords.
The default configuration of the runtime library allows all Oracle users the ability to encrypt or decrypt data dependent on their base table grants.
Because DBA-level users have access to all database objects,
to restrict a DBA’s access to encrypted data, the Encryption Wizard allows you
to define Default Runtime Passwords
which require all users to authenticate themselves against encrypted
objects. You may also employ Restricted User Lists and User-Specific Runtime Passwords to lock
out users such as SYS or SYSTEM completely.
To add an additional layer of protection against data-theft by non-DBA users who may have the proper Oracle grants - you may issue this command to revoke the Encryption Wizard’s Runtime Package from public.
SQL>revoke execute on
rdc_encrypt_runtime from public;
After this command succeeds, simply grant privileges to execute the Runtime Library to individual users as such:
SQL>grant execute on
rdc_encrypt_runtime to SCOTT;
1. EncryptData
EncryptData takes any valid string, number, or date and encrypts the data using the key specified by the Column_Seq, which is the primary key of the table encrypted_column.
EncryptData can be used within PL/SQL, as a user-defined function, or embedded within a language such as Java, C++ or PHP. For Columns that specify DES or AES encryption, the Varchar2, BLOB, or CLOB value will always be returned as rounded upwards to a multiple of 8 bytes if necessary. Use EncyptDataNLS for NVarchar2 and NCHAR datatypes.
Specification
Function EncryptData
(
ColumnSeq In
Number,
InputData In
Varchar2, Date, Number *
)
Return Varchar2, Date,
Number*
*Overloaded
Examples
/* Directly Inserts a new
employee with an encrypted ENAME to the base table SCOTT.EMP */
SQL>Insert Into Emp
(
EmpNo,
Ename
)
Values
(
23454,
RDC_Encrypt_Runtime.EncryptData(
ColumnSeq, ‘Sarah Jones’)
);
/*Updates a new encrypted
Salary number directly to the encrypted base table SCOTT.EMP*/
SQL>Update EMP Set SAL =
RDC_Encrypt_Runtime.EncryptData(ColumnSeq,
65000)
Where
RDC_Encrypt_Runtime.DecryptData(ColumnSeq,
Ename) = ‘Sarah Jones’;
/* Updates SCOTT.EMP directly
by encrypting the value “Joe Smith” for the column ENAME.
Note the use of GetColumnSeq to
determine the primary key for EMP.ENAME*/
SQL>Update SCOTT.EMP Set
Ename =
rdc_encrypt_runtime.EncryptData
(
RDC_Encrypt_Runtime.GetColumnSeq(‘SCOTT’,’EMP’,’ENAME’),
‘Joe Smith’
2. DecryptData
DecryptData takes any valid string, number, or date and decrypts the data using the password key specified by the ColumnSeq variable, thus the key relevant for a given database column. DecryptData can be used within PL/SQL, as a user-defined function, or embedded within a language such as Java, C++ or PHP.
For Columns that specify DES encryption the Varchar2 input variable must be a multiple of 8 bytes or DecyptData will issue a fatal-error. Use DecryptDataNLS for NVarchar2 and NCHAR datatypes.
Specification
Function DecryptData
(
ColumnSeq In
Number,
InputData In
Varchar2, Date, Number*
)