Home > Article > Backend Development > Using Oracle's built-in security features with PHP_PHP Tutorial
Most web applications today require at least some basic security strategy. For example, sites that offer password-protected content, sites with only an administrator backend, blogs and personal magazines, e-commerce sites, corporate intranets, and so on.
The most common design approach to building these types of web applications is to integrate security policies into the business logic of the web application, where the application determines whether a user has permission to access certain data in the database. In this scenario, the database's role is simply to store data and serve it upon request. In other words, if a web application commands the database to provide specific information, the database will execute the command directly without checking the user's permissions.
In this article, you will learn how to leverage Oracle's built-in security features to enforce application security rules at the database level to improve the overall security of your application. As a side benefit, securing data access directly in the database not only improves application security but also helps reduce complexity.
Requirements for database-side security
What about controlling data access from a web application? In most cases there is no problem; this is a good solution, especially if the data involved is non-mission critical or top secret. This method is used in many books and online resources. In fact, one popular PHP/MySQL book explicitly discourages the creation of more than one database user account per application because "additional users or complex permissions may require more checks before proceeding." information and slow down the execution speed of MySQL." This is true; however, there are a few things you might want to consider before giving up on the idea of integrating security into your database logic. Let's look at the following example.
Suppose you create a content management system (CMS). A database is used to store the content published on the website. Most of the data is public and allows anonymous web users to read; but only edits to change the data are allowed. Use a single database account to access and modify records in the database, and control security with PHP code by password-protecting access to administrator-only pages.
If the public side of a web application suffers from a SQL injection attack such as a public search form (i.e. a form that is not tightly coded enough), the intruder may be able to execute arbitrary SQL statements on database objects accessible to the public account. Of course, in this case, executing the SELECT statement doesn't pose a big problem because the data is public. But because public and governance permissions use the same database account, the intruder can also execute UPDATE and DELETE statements, or even delete tables from the database.
How can we prevent this from happening? The simplest method is to completely restrict the public database account's permissions to modify data. Let's take a look at how Oracle solves this problem.
A basic overview of Oracle security
Oracle Database provides Web developers with many ways to control data access, from governing access to specific database objects such as tables, views, and procedures to controlling access to data for individual rows or columns. Obviously, a discussion of every security feature or option available with Oracle is beyond the scope of this article. Here we won’t go into too much detail and just cover the most basic aspects of Oracle data access security:
Authentication and User Accounts
Permissions
Character
Authentication and user accounts. As with other databases, each user (database account) requesting access to Oracle must be authenticated. Validation can be done by a database, operating system, or network service. In addition to basic authentication (password authentication), Oracle also supports strong authentication mechanisms such as Kerberos, CyberSafe, RADIUS, and so on.
Role. An Oracle role is a named set of permissions. Although you can grant user account permissions directly, using roles can greatly simplify user governance, especially when you need to manage a large number of users. Creating small, manageable roles and then granting users one or more roles based on their security level can be very efficient. Not to mention how easy it is to modify permissions