Tuesday, May 7, 2013

Security DB Auditing, Consider - Part 1

Dear Readers,

My name is Franz Devantier, creator of this blog.  I am an Oracle Certified Professional (OCP DBA 11g) Security DBA.  I will be sharing with you the basic duties of an Oracle DBA, and also some of the undocumented, and not so well known tasks. 

I will make a deal with you:  If you refer me to a company that needs database support, from a few hours per week to full time, and I am able to sign a contract with them.
Then I will give you 10% of the monthly contract or deal price every month.  When the contract ends, and we re-sign the contract, I will again give you 10% of the monthly contract price.  This will go on until the company no longer employs or contracts me or my agents to look after their databases.
I can do this, because that 10% is my marketing budget.  When we re-sign the contract, in the future, it may depend on you giving the thumbs up again, and that is worth 10% of the monthly contract price, to be given to you as commission.
Contact: Franz

Security  DB Auditing, Considerations -  Part 1
Auditing
Monitoring and or recording selected user database actions is called auditing.  You can base auditing on actions, like a specific type of SQL statement, or you can base auditing on a combination of factors, that could include the username, application, time, IP address etc.  Security policies trigger auditing when the specified elements in an Oracle Database are accessed or altered.  This may include the contents of a specified object.

Auditing can be used to:
-> Enable future accountability:  Current actions in a schema or on a named table, or a table row, or even to do with a certain piece of data that is sensitive.
-> Deter users, from performing inappropriate actions on the data, because of the knowledge that the database is being audited, and there will be accountability.
-> Establish and investigate suspicious activity.  If it is suspected that a user is maliciously deleting data from tables, then you can audit all the connections to the database, and all successful and unsuccessful deletions of rows from all the tables in the database.
-> You can notify an auditor, that a user is manipulating data directly in the database, and that the user has more privileges than they are expected to have.  This could lead to reassessing user authorizations.
-> Monitor and gather data for specific database activity.
The DBA’s can gather statistics with regards to which tables are being updated, how many logical I/O’s are performed, or how many concurrent users connect at peak times.
-> Use Auditing to detect problems with your authorization and access control systems.
You can set up policies that are never expected to fire, because the data is protected in other ways and by other security mechanisms.  If one of these policies does fire and generate audit records, then you know that, then you know that your authorization and access control systems are not working the way you expected them to.

There are a few different types of Auditing available in Oracle:
-> Auditing types and Records
-> Statement Auditing
-> Privilege auditing
-> Schema Object Auditing
-> Fine-Grained Auditing
-> Focussing Statement, Privilege, and Schema Object Auditing
-> Auditing in a Multitier Environment

Auditing Types and Records
You can set your auditing options to be broad, or you can focus them in on specifics.
-> Successful statement executions, unsuccessful statement executions or both.
-> Statement executions once in each user session or once every time the statement is executed.
-> Activities of a specific user, or the activities of all the users.

 Auditing Types and Descriptions
Type of Auditing (link to discussion)
Meaning/Description
Statement Auditing
Enables you to audit SQL statements by type of statement, not by the specific schema objects on which they operate. Typically broad, statement auditing audits the use of several types of related actions for each option. For example, AUDIT TABLE tracks several DDL statements regardless of the table on which they are issued. You can also set statement auditing to audit selected users or every user in the database, ie focussed or broad.
Privilege Auditing
Enables you to audit the use of powerful system privileges that enable corresponding actions, such as AUDIT CREATE TABLE. Privilege auditing is more focused than statement auditing, which audits only a particular type of action. You can set privilege auditing to audit a selected user or every user in the database.
Schema Object Auditing
Enables you to audit specific statements on a particular schema object, such as AUDIT SELECT ON employees. Schema object auditing is very focused, auditing only a single specified type of statement (such as SELECT) on a specified schema object. Schema object auditing always applies to all users of the database, so it will pick up anybody who queries the employees table for example.
Fine-Grained Auditing
Enables you to audit at the most granular level, data access and actions based on content, using any Boolean measure, such as value > 1,000,000. Enables auditing based on access to or changes in a column.

Franz Devantier,
Need a database health check, or a security audit?
devantierf@gmail.com

Monday, May 6, 2013

Security Policies - Part 14

Dear Readers,

My name is Franz Devantier, creator of this blog.  I am an Oracle Certified Professional (OCP DBA 11g) Security DBA.  I will be sharing with you the basic duties of an Oracle DBA, and also some of the undocumented, and not so well known tasks. 

I will make a deal with you:  If you refer me to a company that needs database support, from a few hours per week to full time, and I am able to sign a contract with them.
Then I will give you 10% of the monthly contract or deal price every month.  When the contract ends, and we re-sign the contract, I will again give you 10% of the monthly contract price.  This will go on until the company no longer employs or contracts me or my agents to look after their databases.
I can do this, because that 10% is my marketing budget.  When we re-sign the contract, in the future, it may depend on you giving the thumbs up again, and that is worth 10% of the monthly contract price, to be given to you as commission.
Contact: Franz

Security Policies  -  Part 14
Apply all security patches and workarounds.
Always apply all the relevant security and current patches for the Oracle Database Server.  It is important to apply all the latest patches for the Operating System as well.

On a regular basis, once a month or once a week, check the security site on Oracle Technology Network for details on security alerts released by Oracle Corporation:  http://www.oracle.com/technetwork/topics/security/alerts-086861.html
Alos check Oracle Worldwide Support Service site, My Oracle Support, for all the details of the currently available and upcoming security related patches:

Contact Oracle Security Products if you come across a vulnerability in the Oracle Database.
If after research and verification, you believe that you have found a vulnerability in the Oracle database Server then.  Check it again to make sure that you have all your ducks in a row.  Then you can log a service request to “Oracle Worldwide Support Services”, or alternatively you can email a complete description of the problem, and include the product version, and platform version etc.  Include any scripts or procedures that you have been using to create the vulnerability, as well as any examples that you may have developed. To secalert_us@oracle.com  To be honest I would love to have a look at it as well.

Franz Devantier,
Need a database health check, or a security audit?
devantierf@gmail.com

Sunday, May 5, 2013

Security Policies - Part 13


Dear Readers,

My name is Franz Devantier, creator of this blog.  I am an Oracle Certified Professional (OCP DBA 11g) Security DBA.  I will be sharing with you the basic duties of an Oracle DBA, and also some of the undocumented, and not so well known tasks. 

I will make a deal with you:  If you refer me to a company that needs database support, from a few hours per week to full time, and I am able to sign a contract with them.
Then I will give you 10% of the monthly contract or deal price every month.  When the contract ends, and we re-sign the contract, I will again give you 10% of the monthly contract price.  This will go on until the company no longer employs or contracts me or my agents to look after their databases.
I can do this, because that 10% is my marketing budget.  When we re-sign the contract, in the future, it may depend on you giving the thumbs up again, and that is worth 10% of the monthly contract price, to be given to you as commission.
Contact: Franz

Security Policies  -  Part 13
Restrict operating system access.
The first thing to do is to limit the number of operating system users that are connecting to the server.  Limit the privileges of the operating system accounts.  Limit the privileges of administrative, root and dba on the Oracle database host or machine, to the least privileges needed for the users tasks.

-> It is good practice to restrict the ability to modify the default file and directory permissions for the Oracle Database Home directory or the installation directory and its contents.  Even privileged operating system users and the Oracle owner should not modify these permissions, unless instructed by Oracle Support.

-> Restrict the use of symbolic links were possible.  When there are symbolic links, ensure that all parts of the link belong to Oracle or a trusted user like root.  Make sure that no part of the file or the directory structure is modifiable by an untrusted user.  It is good practice to protect all types of files in this way, including data files, log files, trace files, external tables, and bfiles.

Use a firewall.
You should keep your database behind a firewall.  The Oracle network infrastructure also provides support for a variety of  firewalls; such as proxy-enabled firewalls such as Gauntlet from Network associates, Raptor from Axent.  Packet filtering firewalls such as PIX firewall from Cisco, and stateful inspection firewalls (Sophisticated packet-filtered firewall) such as Firewall-1 from CheckPoint.  Then of course there is the Oracle Database Firewall.  The Oracle network infrastructure used with oracle 8 was Net8, and then we moved on to SQL*Net, and now we have the “Oracle Network Infrastructure”.   The important point to remember is to use a firewall, and keep your data protected behind the firewall.

Never poke a hole through a firewall.
If the database is behind the firewall, then whatever you do, don’t poke holes in the firewall.  For example do not leave port 1521 open for the Oracle Listener to make a connection to the internet or vice versa.  This is a well known port address, and so not very secure.

Leaving or poking holes in the firewall can introduce significant security vulnerabilities; including more port openings being made in the firewall, multi-threaded operating server issues, and the exposure of sensitive data on the database behind the firewall.

An Oracle listener running without a password, may be probed for crucial details about the databases on which it is listening, such as trace and logging information, banner information and database descriptors and service names.

All of the above information combined with a badly configured firewall will provide an attacker plenty of opportunity to launch malicious attacks on the target database.

For example, if the listener is not protected by a firewall, then you can do this, and collect enough information to carry out malicious actions:
C:\Users\fred>lsnrctl status

LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 19-MAR-2013 21:56:20

Copyright (c) 1991, 2010, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=MyDBA018)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production
Start Date                19-MAR-2013 21:27:12
Uptime                    0 days 0 hr. 29 min. 11 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   D:\app\product\11.2.0\dbhome_1\network\admin\listener.ora
Listener Log File         d:\app\diag\tnslsnr\fred\listener\alert\log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\fredipc)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=fred-PC)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
Services Summary...
Service "CLRExtProc" has 1 instance(s).
  Instance "CLRExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "fred" has 1 instance(s).
  Instance "fred", status READY, has 1 handler(s) for this service...
Service "fredXDB" has 1 instance(s).
  Instance "fred", status READY, has 1 handler(s) for this service...
The command completed successfully

Protect the Oracle listener.
The listener is the database gateway to the network, so it is important to limit the consequences of malicious interference.

You can restrict the listener privileges to prevent it from reading or writing files to the database or the Oracle Server address space.  This will prevent external procedure agents spawned by the listener, from inheriting the ability to do such reads or writes.

 The owner of the separate listener process should not be the owner that installed Oracle or executes the Oracle instance, such as Oracle which is the default owner.

You can prevent online administration by requiring the  administrator to have write privileges on the LISTENER.OrA file, and to have the listener password.
Add this into the listener.ora:
ADMIN_RESTRICTIONS_LISTENER=ON
Then restart the listener.

You can use SSL when administering the listener, by making the TCPS protocol the first entry in the address list.  For example:
LISTENER=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=
(PROTOCOL=tcps)
(HOST = fred.oracle.co.za)
(PORT = 8288)))

To administer the listener remotely, you need to define the listener in the listener.ora file on the client computer.
For example to access the listener USER333 remotely, put this in your client side listener:
User333 =
(DESCRIPTION =
(ADDRESS =
(PROTOCOL = tcps)
(HOST = fred.oracle.co.za)
(PORT = 8288)))

Always establish a secure, well-formed password for the Oracle listener to prevent remote configuration of the Oracle listener.  You can password protect the listener like this:

LSNRCTL> CHANGE_PASSWORD
Old password: lsnrc80
New password: lsnrc90
Reenter new password: lsnrc90

LSNRCTL> SAVE_CONFIG
The command completed successfully

You can remove the external procedure configuration from the listener.ora file, if you do not intend to use such procedures.

Monitor the listener activity.

Monitor who accesses your systems.
Authenticating client computers over the internet is problematic.  It is better to use User authentication, which avoids client system issues that include falsified IP addresses, hacked operating systems or applications, and falsified and/or stolen client system identities.

You can improve Client computer security:
-> By configuring the connection to use Secure Sockets layer (SSL).  SSL communication makes eavesdropping unfruitful and enables the use of certificates for user and server authentication.
-> set up certificate authentication for clients and servers so that:
   -> The organization is identified by unit and certificate issuer, and the user is identified by distinguished name and certificate issuer.
    -> The applications should test for expired certificates
   -> Certificate revocation lists are audited.   

Check network IP addresses.
You can use the Oracle Net “valid node checking security” feature to allow or deny access to Oracle Server Processes from network clients with a specified IP addresses.  In order to use this feature, you can set the following parameters in the protocol.ora file, which is the Oracle Net Configuration File.
TCP.VALIDNODE_CHECKING = YES
TCP.EXCLUDED_NODES = {list of IP addresses}
TCP.INVITED_NODES = {list of IP addresses}
The first parameter turns on the feature.  Parameters 2 and 3 deny and allow specific client IP addresses from making connections to the Oracle Listener.  This is a useful strategy in preventing potential denial of service attacks.

Encrypt network traffic.
You can use Oracle Advanced Security to encrypt network traffic between clients, databases, and application servers.
Oracle Advanced Security is available with the Enterprise edition of the Oracle Database.  It installs in typical installation mode, and can be configured, with the Oracle Net Manager tool or by manually setting six SQLNET.ORA parameters to enable network encryption.  There is of course a licensing aspect to Advanced Security.

Harden the operating system.
You can harden the operating system by disabling all unnecessary operating system services.  Both UNIX and Windows platforms provide a variety of operating system services, most of which are not necessary, for the Oracle application or deployment.  You can definitely disable services like FTP, TFTP, TELNET.  Remember to close both the UDP and the TCP ports for each service that is being disabled.  You need to disable both types of port in order to make the operating system more secure.

Franz Devantier,
Need a database health check, or a security audit?
devantierf@gmail.com

Saturday, May 4, 2013

Security Policies - Part 12

Dear Readers,

My name is Franz Devantier, creator of this blog.  I am an Oracle Certified Professional (OCP DBA 11g) Security DBA.  I will be sharing with you the basic duties of an Oracle DBA, and also some of the undocumented, and not so well known tasks. 

I will make a deal with you:  If you refer me to a company that needs database support, from a few hours per week to full time, and I am able to sign a contract with them.
Then I will give you 10% of the monthly contract or deal price every month.  When the contract ends, and we re-sign the contract, I will again give you 10% of the monthly contract price.  This will go on until the company no longer employs or contracts me or my agents to look after their databases.
I can do this, because that 10% is my marketing budget.  When we re-sign the contract, in the future, it may depend on you giving the thumbs up again, and that is worth 10% of the monthly contract price, to be given to you as commission.
Contact: Franz

Security Policies  -  Part 12
Authenticate clients properly.
The default mode of operation, is that Oracle allows Operating System authenticated logons only over secure connections.  This precludes using Oracle Net, and a shared server configuration.  This default restriction prevents a remote user from impersonating another operating system user over a network connection.

By default the initialization parameter REMOTE_OS_AUTHENT is set to FALSE.
SQL> show parameter remote_os_authent
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
remote_os_authent                    boolean     FALSE
SQL>

If you set REMOTE_OS_AUTHENT=TRUE, then you force the Oracle RDBMS to accept the client operating system user name received over a nonsecure connection and use it for account access.  Clients such as PC’s / Laptops, are not trusted to perform operating system authentication properly, it is not a good security practice to do this.

The default setting of REMOTE_OS_AUTHENT=FALSE, creates a much more secure configuration.  This configuration enforces proper, server based authentication of clients connecting to an Oracle database.  Therefore it is good practice to no change the default setting of the REMOTE_OS_AUTHENT initialization parameter.  It is good practice to leave it with the value of FALSE.

If REMOTE_OS_AUTHENT=FALSE, it means that the database will not trust that the client has already been authenticated, and will therefore apply the standard authentication processes.  It does not mean that users can’t connect remotely.

Franz Devantier,
Need a database health check, or a security audit?
devantierf@gmail.com

Friday, May 3, 2013

Security Policies - Part 11

Dear Readers,

My name is Franz Devantier, creator of this blog.  I am an Oracle Certified Professional (OCP DBA 11g) Security DBA.  I will be sharing with you the basic duties of an Oracle DBA, and also some of the undocumented, and not so well known tasks. 

I will make a deal with you:  If you refer me to a company that needs database support, from a few hours per week to full time, and I am able to sign a contract with them.
Then I will give you 10% of the monthly contract or deal price every month.  When the contract ends, and we re-sign the contract, I will again give you 10% of the monthly contract price.  This will go on until the company no longer employs or contracts me or my agents to look after their databases.
I can do this, because that 10% is my marketing budget.  When we re-sign the contract, in the future, it may depend on you giving the thumbs up again, and that is worth 10% of the monthly contract price, to be given to you as commission.
Contact: Franz

Security Policies  -  Part 11
Grant necessary privileges only.
Practice the Principle of least privilege.

Do not provide database users more privileges than are necessary for them to complete their tasks.  The “Principle of least privilege”, is that users will be given only those privileges that are actually required to efficiently perform their jobs.  In order to implement this principle, you need to restrict as much as possible:
-> The number of SYSTEM and OBJECT privileges granted to database users.
-> The number of people who are allowed to make SYS-Privileged connections to the database.  For example there is typically no need to grant DROP ANY TABLE to a non-DBA-privileged user.

 Revoke unnecessary privileges from the PUBLIC role.
Revoke all the unnecessary privileges and roles from the PUBLIC role.  PUBLIC acts as a default role granted to every user in an Oracle database.  If the privileges are granted to PUBLIC, then any database user can execute those privileges.  For example EXECUTE privileges on PL/SQL packages would potentially enable a user with almost no privileges to run some very powerful packages, that he/she would not normally have had access to.  Some of these packages can cause damage to the installation, either accidentally or maliciously.

Below are some of the more powerful packages that could be misused:
Package or Subtype
Description
DBMS_RANDOM
This package can be used to encrypt stored data. Generally, most users should not have the privilege to encrypt data since encrypted data may be non-recoverable if the keys are not securely generated, stored, and managed.  Encryption can easily become a one way process.
HTTPURITYPE
This subprogram is a subtype of the UriType that provides support for the HTTP protocol. It uses the UTL_HTTP package underneath to access the HTTP URLs. Proxy and secure wallets are not supported in this release. Downgrade grants on HTTPURITYPE to the minimum needed in your environment, or revoke all grants if none of your applications need it.
UTL_HTTP
This package allows the database server to request and retrieve data using HTTP.
UTL_INADDR
This package allows arbitrary domain name resolution to be performed from the database server. Granting this package to the PUBLIC role may permit unauthorized domain name resolution.
UTL_SMTP These packages and subtype should be revoked from PUBLIC and made executable for an application only when absolutely necessary.
This package permits arbitrary mail messages to be sent from one arbitrary user to another arbitrary user. Granting this package to the PUBLIC role may permit unauthorized exchange of mail messages.
UTL_TCP
This package permits outgoing network connections to be established by the database server to any receiving (or waiting) network service. Granting this package to PUBLIC may permit arbitrary data to be sent between the database server and any waiting network service.  This is a big security issue.  Revoke this from PUBLIC if appropriate.

The packages mentioned above are very useful to the applications that use them.  However they require proper configuration and usage for safe and secure operation.  These packages may not be suitable for all applications, because of the security implications.

If an application does need these packages or a subset of them, the create a role with the EXECUTE privilege for the needed package, and assign these roles only to applications that specifically need and use them.  Even better would be to grant these privileges to secure application roles.

In future releases of Oracle, the intention is to revoke such privileges from the PUBLIC role.

Grant a role to users only if they need all privileges of the role.
Roles are very useful for quickly granting a group of privileges to a user.  The Oracle-defined roles are more generic, and may contain more privileges than you want to grant.  So it is best to create your own custom roles.  You will need to design and create roles that contain only those privileges that are required for a specific group of users.  Create a few custom roles, so that you will have a role that fits as closely as possible to a user’s needs, based on the job responsibility.

If the application uses don’t need all of the privileges in a role or a set of roles, then you need to create another role or set of roles that contain just the right privileges for the application users, with specific job functions.

If you are not going to drop the user scott, or keep scott permanently locked and expired, then you should drop the privileges that are assigned to scott, like the CREATE DBLINK system privilege.  Because you can’t drop individual privileges that are acquired by means of a role, you will need to drop the entire role.  You can create a new role, with just those minimal privileges needed for the user, and grant that role to the user.  It is good practice to drop the CREATE DBLINK system privilege from all users who don’t specifically need it. 

Restrict permissions on run-time facilities.
Do not assign all permissions to any database server run-time utility.  For example the Java Virtual Machine (OJVM).  Grant specific permissions for such utilities, that may execute files and packages outside of the database server; and then only to the explicit document root file paths.

Here is a run-time call that is vulnerable to malicious action:
dbms_java.grant permission(‘SCOTT”,’SYS:java.io.FilePermission’,’<<ALL FILES>>’,’read’);

Here is a run-time call that is less vulnerable:
dbms_java.grant_permission(‘SCOTT’,’SYS:java.io.FilePermission’,’<<ROOT DRECTORY PATH>>,’read’);

Franz Devantier,
Need a database health check, or a security audit?
devantierf@gmail.com

Thursday, May 2, 2013

Security Policies - Part 10

Dear Readers,

My name is Franz Devantier, creator of this blog.  I am an Oracle Certified Professional (OCP DBA 11g) Security DBA.  I will be sharing with you the basic duties of an Oracle DBA, and also some of the undocumented, and not so well known tasks. 

I will make a deal with you:  If you refer me to a company that needs database support, from a few hours per week to full time, and I am able to sign a contract with them.
Then I will give you 10% of the monthly contract or deal price every month.  When the contract ends, and we re-sign the contract, I will again give you 10% of the monthly contract price.  This will go on until the company no longer employs or contracts me or my agents to look after their databases.
I can do this, because that 10% is my marketing budget.  When we re-sign the contract, in the future, it may depend on you giving the thumbs up again, and that is worth 10% of the monthly contract price, to be given to you as commission.
Contact: Franz

Security Policies  -  Part 10
Enable data dictionary protection.
It is good practice to implement data dictionary protection to prevent users from having “ANY” system privileges, from using such privileges on the data dictionary.

To enable data dictionary protection, set the following initialization parameter to FALSE.
07_DICTIONARY_ACCESSIBILITY=FALSE

SQL> show parameter dictionary
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
O7_DICTIONARY_ACCESSIBILITY          boolean     FALSE
SQL>

By doing this, only those authorized with DBA-privileged connections will be able to exercise the “ANY” system privileges on the data dictionary.  You can set this in the parameter file, or the server parameter file and restart the database.  After the process remember to create a parameter file for yourself again.
SQL> create pfile from spfile;

If O7_DICTIONARY_ACCESSIBILITY=TRUE, then any user with an “ANY” privilege can exercise this privilege in the data dictionary.  For example a user with the DROP ANY TABLE system privilege would be able to drop any table in the data dictionary.  This could result in severe damage to the data dictionary, and ultimately the database, either accidently or maliciously.

If a user needs view access to the data dictionary, then it is normal practice to grant that user the SELECT ANY DICTIONARY system orivilege.

07_DICTIONARY_ACCESSIBILITY came out in Oracle 7 with a default of TRUE.  Up to Oracle 8i, the default was still set to TRUE.  From 9i onwards this parameter is set to FALSE by default.

The SELECT ANY DICTIONARY privilege is not included in the GRANT ALL PRIVILEGES statement, but it can be granted explicitly to a user, or through a role.  Be careful of running the GRANT ALL PRIVILEGES statement, because by doing this you are creating security problems.

Franz Devantier,
Need a database health check, or a security audit?
devantierf@gmail.com

Wednesday, May 1, 2013

Security Policies - Part 9

Dear Readers,

My name is Franz Devantier, creator of this blog.  I am an Oracle Certified Professional (OCP DBA 11g) Security DBA.  I will be sharing with you the basic duties of an Oracle DBA, and also some of the undocumented, and not so well known tasks. 

I will make a deal with you:  If you refer me to a company that needs database support, from a few hours per week to full time, and I am able to sign a contract with them.
Then I will give you 10% of the monthly contract or deal price every month.  When the contract ends, and we re-sign the contract, I will again give you 10% of the monthly contract price.  This will go on until the company no longer employs or contracts me or my agents to look after their databases.
I can do this, because that 10% is my marketing budget.  When we re-sign the contract, in the future, it may depend on you giving the thumbs up again, and that is worth 10% of the monthly contract price, to be given to you as commission.
Contact: Franz

Security Policies  -  Part 9
Change default user passwords.
The easiest way for the Oracle Database Server to be compromised, is a default database account that still has a default password associated with it.

Change default passwords of administrative users.
In Oracle Database 10g, you can use the same or different passwords for the SYS, SYSTEM,SYSMAN, and DBSNMP administrative accounts.  It is good practice to use different passwords for each of them.  Assign strong, secure, and distinct passwords to these administrative accounts.  If you use DBCA, then the defaults  of SYS/CHANGE_ON_INSTALL and SYSTEM/MANAGER are not allowed.

Change default passwords of all users.
In 10g, SCOTT no longer installs with the default password of TIGER.  SCOTT and DBSNMP are locked and expired.  The other default user accounts install with a default password that is exactly the same as that user account, for example you could log in as MDSYS/MDSYS.

If any of the default user accounts need to be activated, then remember to assign a new secure password to each such user account.

Enforce password management.
It is best practice to apply basic password management rules to your installation.  Rules such as the minimum length of a password, the history of passwords, ie it should be at least three characters different to the previous password.  The complexity of the password, as well as checking that it is not the same as the user name is important.

It is good to use Oracle Advanced Security (Enterprise Edition), with network authentication services such as Kerberos, token cards, smart cards, or X.509 certificates.  Services like these enable stroing authentication of users to provide better protection against unauthorized access to your data, and installation.

Franz Devantier,
Need a database health check, or a security audit?
devantierf@gmail.com